
<script>
  // 观察者模式是基于发布订阅的
  // 观察者模式有两个角色：1）发布者  2）订阅者

  // 发布者
  class Dep{
    constructor(){
      // 发布者中有一个容器，记录所有的订阅者
      // 一个发布者中包含了N个订阅者,订阅者也可以叫观察者
      // 在发布者中有两个方法
      //  一个叫addSub,用来把一个订阅者添加到subs
      //  一个叫notify,用来通知每一个订阅者执行update方法
      this.subs = [];
    }
    // 添加订阅者
    addSub(sub){
      // 把sub添加到subs之前，判断一下订阅者是否合格
      // 所谓的合格，就是你里面有一个update
      if(sub && sub.update){
        this.subs.push(sub)
      }
    }
    // 通过所有的订阅者 
    notify(){
      this.subs.forEach(sub=>{
        sub.update(); // 调用订阅者的update方法
      })
    }
  }

  // 订阅者
  class Watcher{
    // update方法，就是用来更新视图的~
    update(){
      console.log("更新视图~");
    }
  }

  let dep = new Dep();
  let watcher = new Watcher();
  dep.addSub(watcher);
  dep.notify(); // 通知订阅者
</script>